<?php

/*WICHTIG FÜR SESSION
 *
 * Monmentan wird eine Session erstellt, wenn man sich anmeldet.
 * Es wird noch ein Button benötig, mit dem man sich abmelden kann.
 * Momentan muss die session noch per Hand zerstört werden: Zend_Session::destroy();
 * Falls man dies nicht tut, bleibt die Session bestehen (ich weiß aber nicht wie lange, also ob ein
 * Neustart ausreicht um sie zu zerstören)
 * Ich habe der Session zwei Parameter mitgegeben und zwar die Benutzernummer und den Status(ist bis
 * jetzt immer 'Admin' getStatus() noch nicht fertig programmiert) auf die man so zugreifen kann:
 * 					$variablenname = $pareNamespace->nr; (Benutzernummer)		und
 * 					$variablenname = $pareNamespace->status; (status)
 * Zu beachten: jedes mal wenn man die Sessionparameter verwenden will, muss man in jeder action erst den
 * Namespace erstellen(ist bis jetzt nur eine vorläufige lösung, damit wir mit den Sessions arbeiten könne) :
 * 					$pareNamespace = new Zend_Session_Namespace('PaRe');
 *
 * Als Beispiel wird bei mir in der Action anlegen ein Namespace pareNamespace erstellt und
 * somit gleich eine Session gestartet. Dieser werden dann zwei parameter übergeben und in
 * der action uebersicht, werden diese parameter ausgegeben und dann wird die session zerstört
 *
 * zum überprüfen ob die session/der namespace existiert wird mit zum beispiel isset(parenamespace->nr)
 * ünerprüft
 */

//im footer
//php echo $this->action('actionname','controller')

//in der form einen parameter übergeben
//deklarieren und im _construkt festlegen
//und dann im controller $this->$view->form(parameter);

class BenutzerController extends Zend_Controller_Action
{

	public function init()
	{
		/* Initialize action controller here */
		//session_start();
	}

	public function indexAction()
	{
		// action body
		//umleitung auf die Übersichtseite des Benutzers
		return $this->_redirect('/benutzer/uebersicht');
	}

	//legt einen neuen Benutzer an, startet "Neben"-Session um Benutzernummer dann ausgeben
	public function anlegenAction()
	{
		$pareNamespace = new Zend_Session_Namespace('PaRe');
		if(isset($pareNamespace->nr)){
			if($pareNamespace->status=='Admin'){
				$request = $this->getRequest();
				$form    = new Application_Form_BenutzerAnlegenForm();
				if ($this->getRequest()->isPost()) {
					if ($form->isValid($request->getPost())) {
						$model = new Application_Model_Benutzer($form->getValues());
						$mapper  = new Application_Model_BenutzerMapper();
						$mapper->anlegen($model);
						//return $this->_redirect('/benutzer/meldung?meldung=benutzerAngelegt');
						$name=$model->name;
						$vorname=$model->vorname;
						$status=$model->status;
						$passwort=$model->passwort;
						$regNamespace = new Zend_Session_Namespace('PaRe');
						$regNamespace->name=$name;
						$regNamespace->vorname=$vorname;
						$regNamespace->status=$status;
						$regNamespace->passwort=$passwort;
						return $this->_redirect('/index');
					}
				}
			}else{
				$form = new Application_Form_BenutzerAnlegenForm();
				return $this->_redirect('/benutzer/meldung?meldung=falscherStatus');
			}
		}else{
			//fehlermeldung wird einfach nicht ausgegeben
			//falls man nicht berechtigt ist, kommt man zur fehlerseite
			//leere Form mit der man nichts anfangen kann, aber die benötigt wird, damit es keine fehlermeldung gibz
			$form = new Application_Form_BenutzerAnlegenForm();
			return $this->_redirect('/benutzer/meldung?meldung=nichtAngemeldet');
		}
			
		$this->view->form = $form;
	}

	//zeigt die Benutzeruebersicht an, abhängig vom Status
	public function uebersichtAction()
	{
		// action body

		$pareNamespace = new Zend_Session_Namespace('PaRe');
		if(isset($pareNamespace->nr)){
			$request = $this->getRequest();
			//hier benutzerid aus session lesen
			$status=$pareNamespace->status;
			$nr = $pareNamespace->nr;
			$mapper = new Application_Model_BenutzerMapper();
			if($status != 'Admin'){
				$data = $mapper->fetchBenutzer($nr);
			}else{
				$data = $mapper->fetchAll();
			}
		}else{
			$data=array();
			return $this->_redirect('/benutzer/meldung?meldung=nichtAngemeldet');

		}
		$this->view->data = $data;
		
	}

	//Benutzer meldet sich an, "Haupt"-Session wird erzeugt
	public function anmeldenAction()
	{
		// action body
		$pareNamespace = new Zend_Session_Namespace('PaRe');
		if(isset($pareNamespace->nr)){
			//leere LoginForm bei der man nichts machen kann, weil man schon angemeldet ist
			//$form=new Application_Form_LoginForm();
			//oder man verweist auf die Fehlerseite
			return $this->_redirect('/benutzer/meldung?meldung=schonAngemeldet');
		}else{
			$request = $this->getRequest();
			$form    = new Application_Form_LoginForm();
			if ($this->getRequest()->isPost()) {
				if ($form->isValid($request->getPost())) {
					$nr=$form->getValue('nr');
					$passwort=$form->getValue('passwort');
					$mapper  = new Application_Model_BenutzerMapper();

					if ($mapper->userExists($nr)==true) {
						if ($mapper->pruefePasswort($nr,$passwort)==true) {
							echo 'passwort richtig';
							$status=$mapper->getStatus($nr);
							//hier session starten!
							$pareNamespace = new Zend_Session_Namespace('PaRe');
							$pareNamespace->nr=$nr;
							$pareNamespace->status=$status;
							return $this->_redirect('/benutzer/index');
						}else {
							echo 'passwort oder benutzernumer falsch';
						}
					}
					else{
						//return $this->_redirect('/benutzer/anlegen');
						echo 'passwort oder benutzernummer falsch';//muss man wissen ob ein benutzer existiert?
						//evtl sicherheitslücke, da man benutzernummern auf gültigkeit prüfen kann
						//keine "große" lücke mehr, da bei falschem passwort oder nicht existenter
						//benutzernummer die gleiche fehlermeldung ausgegeben wird
					}
				}
			}
		}
		$this->view->form = $form;
	}

	//neue Benutzer können registriert werden, aber status kann nicht admin sein
	//legt einen neuen Benutzer an, startet "Neben"-Session um Benutzernummer dann ausgeben
	public function registrierenAction()
	{
		// action body
		$pareNamespace = new Zend_Session_Namespace('PaRe');
		if(isset($pareNamespace->nr)){
			//leere Form bei der man nichts machen kann, weil man schon angemeldet ist
			//$form=new Application_Form_BenutzerAnlegenform();
			//oder man verweist auf die Fehlerseite
			return $this->_redirect('/benutzer/meldung?meldung=schonAngemeldet');
		}else{
			$status='Stud';
			$request = $this->getRequest();
			$form    = new Application_Form_BenutzerAnlegenForm1();
			if ($this->getRequest()->isPost()) {
				if ($form->isValid($request->getPost())) {
					$model = new Application_Model_Benutzer($form->getValues());
					$mapper  = new Application_Model_BenutzerMapper();
					$mapper->anlegen($model);
					$name=$model->name;
					$vorname=$model->vorname;
					$status=$model->status;
					$passwort=$model->passwort;
					$regNamespace = new Zend_Session_Namespace('PaRe');
					$regNamespace->name=$name;
					$regNamespace->vorname=$vorname;
					$regNamespace->status=$status;
					$regNamespace->passwort=$passwort;
					
					return $this->_redirect('/index');
					
				}
			}
		}
		$this->view->form = $form;

	}

	//Benutzer meldet sich ab, session wird zerstört
	public function abmeldenAction()
	{
		// action body
		$pareNamespace = new Zend_Session_Namespace('PaRe');
		$request = $this->getRequest();
		if (isset($request->abmelden)){
			Zend_Session::destroy();
			return $this->_redirect('/index');
		}

		if (isset($pareNamespace->nr)){
			$this->view->linkanzeigen = true;
		}
	}

	//Benutzer wird gelöscht, je nachdem ob er berechtigt ist oder nicht
	//falls er sich selber löscht, wird die session zerstört
	public function loeschenAction()
	{
		// action body
		$pareNamespace = new Zend_Session_Namespace('PaRe');
		$mapper = new Application_Model_BenutzerMapper();
		if((isset($pareNamespace->nr))&&(isset($_GET["loeschen"]))&&($mapper->userExists($_GET["loeschen"])==true)){
			if($pareNamespace->status=='Admin'){
				$tempnr=$pareNamespace->nr;
				if($tempnr == ($_GET["loeschen"])){
					$nr=$_GET["loeschen"];
					$mapper->loeschen($nr);
					$this->alleReservierungenEntfernen($nr);
					Zend_Session::destroy();
					return $this->_redirect('/benutzer/meldung?meldung=selberGeloescht');
					
				}else{
					$nr=$_GET["loeschen"];
					
					$mapper->loeschen($nr);
					$this->alleReservierungenEntfernen($nr);
					return $this->_redirect('/benutzer/meldung?meldung=BenutzerGeloescht');
				}

			}else{
				$nr=$pareNamespace->nr;
				$mapper->loeschen($nr);
			
				$this->alleReservierungenEntfernen($nr);
				Zend_Session::destroy();
				return $this->_redirect('/benutzer/meldung?meldung=selberGeloescht');
			}
			//$mapper->loeschen($nr);
			
				
		}else{
			return $this->_redirect('/benutzer/fehler?fehlercode=falscheParameterBeimLoeschen');
		}
	}
	
	//wird ausgeführt wenn, wenn ein Benutzer gelöscht wird
	private function alleReservierungenEntfernen($benutzernr){
			$reservierungenMapper = new Application_Model_ReservierungenMapper();
			$kalenderMapper = new Application_Model_KalenderMapper();
			$parkplatzMapper = new Application_Model_ParkplatzMapper();
			
			$entries = $reservierungenMapper->fetchReservierungen($benutzernr);
			
			foreach($entries as $index => $model){
	        	//fetchparkplatznr geht noch nicht richtig
				$temp = $parkplatzMapper->fetchParkplatz($model->getParkplatznr());
				$parkplatzModel = $temp[0];
				$kalendername = $parkplatzModel->getKalenderName();
	        	
				$kalenderMapper->setTableName($kalendername);//kalendername als tabellenname verwenden
	        	
				$reservierungenMapper->stornieren($model->getNr());//reservierung löschen
				
	        	$kalenderMapper->austragen($model->getDatumvon(), $model->getDatumbis(), $benutzernr);//benutzernr aus kalender austragen
			}
	}


	//Benutzer kann sich selbst oder andere ändern, abhängig vom status
	//Passwort muss erneut eingegeben werden, umständlich und
	//evtl. Fehlerquelle, da man aus versehen Passwort ändern kann
	public function aendernAction()
	{
		//ectentuell noch unsicher, da jemande, der sich auskennt eine andere BenutzerNummer übergeben kann
		//und somit auch andere Benutzer ändern kann, obwohl er nicht brechtigt ist
		// action body
		$pareNamespace = new Zend_Session_Namespace('PaRe');
		$mapper = new Application_Model_BenutzerMapper();

		if (isset($_GET['aendern'])){
			$nr = $_GET['aendern'];
			$pareNamespace->benutzerNr = $nr;

		} else if (empty($_GET['aendern'])){
			$nr = $pareNamespace->benutzerNr;
			 
		}

		if((isset($pareNamespace->status))&&($mapper->userExists($nr)==true)){
			$request = $this->getRequest();
			$data = $mapper->fetchBenutzer($nr);
			if($pareNamespace->status=='Admin'){
			$form    = new Application_Form_BenutzerAnlegenForm(null,$data[0]->passwort,$data[0]->name,$data[0]->vorname,$data[0]->status);
			}else{
			$form    = new Application_Form_BenutzerAnlegenForm1(null,null,$data[0]->name,$data[0]->vorname,$data[0]->status);
			}
				
			if ($this->getRequest()->isPost()) {
				if ($form->isValid($request->getPost())) {
					$model = new Application_Model_Benutzer($form->getValues());
					$mapper->aendern($model,$nr);
					return $this->_redirect('/benutzer/meldung?meldung=BenutzerGeaendert');
				}
			}
		}else{
			//leere Form die nichts bewirkt, außer dass es keine fehlermeldung mehr gibt
			$form=new Application_Form_BenutzerAnlegenForm();
			return $this->_redirect('/benutzer/fehler?fehlercode=falscheParameterBeimAendern');
		}
		
		$this->view->form=$form;
		
	}

	//dient nur dazu, dass es ein view script gibt, dass ich verwenden kann
	public function fehlerAction()
	{
		// action body
	}

	//dient nur dazu, dass es ein view script gibt, dass ich verwenden kann
	public function meldungAction()
	{
		// action body
	}

}

















